package com.ty.skysystem.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ty.common.validator.group.SaveGroup;
import com.ty.common.validator.group.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.annotation.PreDestroy;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Pattern;

/**
 * 驾驶员信息表: 用于存放和管理驾驶员信息 字段列: team_id => 对应表: truck_team
 *
 * @author tianyuzhu
 * @email 1659770218@QQ.COM
 * @date 2020-12-11 15:40:53
 */
@Data
@TableName("driver")
@ApiModel(value = "驾驶员信息实体类")
public class DriverEntity implements Serializable {
  private static final long serialVersionUID = 1L;

  /** 驾驶员ID(自增) */
  @NotNull(
      message = "修改时需要携带驾驶员ID",
      groups = {UpdateGroup.class})
  @Null(
      message = "新增时不能携带驾驶员ID",
      groups = {SaveGroup.class})
  @TableId(value = "driver_id", type = IdType.AUTO)
  @ApiModelProperty(value = "驾驶员ID,主键)")
  private Long driverId;
  /** 驾驶员姓名 */
  @NotNull(
      message = "驾驶员姓名不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty(value = "驾驶员姓名")
  private String name;
  /** 性别 ： 0 男 1 女 */
  @NotNull(
      message = "驾驶员姓别不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty(value = "性别 ： 0 男 1 女")
  private Integer sex;
  /** 出生日期 */
  @NotNull(
      message = "驾驶员出生日期不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty(value = "出生日期")
  private Date birth;
  /** 联系电话 */
  @Pattern(
      message = "手机号不合法",
      groups = {SaveGroup.class, UpdateGroup.class},
      regexp =
          "[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}")
  @NotNull(
      message = "驾驶员联系电话不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty(value = "联系电话")
  private String phone;
  /** 身份证号码 */
  @Pattern(
      message = "身份证不合法",
      groups = {SaveGroup.class, UpdateGroup.class},
      regexp =
          "[1-9]\\d{5}(18|19|20|(3\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]")
  @ApiModelProperty(value = "身份证号码")
  private String idCard;
  /** 车队编号 */
  @ApiModelProperty(value = "车队编号")
  private Long teamId;
  /** 工作状态 : 1:承运中 2:空闲 */
  @Range(
      min = 1,
      max = 2,
      message = "工作状态必须为1或2",
      groups = {SaveGroup.class, UpdateGroup.class})
  @ApiModelProperty(value = "工作状态 : 1:承运中 2:空闲")
  private Integer state;
  /** 备注 */
  @ApiModelProperty(value = "备注")
  private String remark;
  /** 1 表示删除， 0 表示未删除 */
  @ApiModelProperty(value = "逻辑删除 1 表示删除， 0 表示未删除")
  @TableLogic
  @JsonInclude(JsonInclude.Include.NON_NULL)
  private Integer isDeleted;
  /** 创建时间 */
  @ApiModelProperty(value = "创建时间")
  private Date createTime;
  /** 修改时间 */
  @ApiModelProperty(value = "修改时间")
  private Date updateTime;
}
